package cn.z2huo.demo.hello.kafka.api;

import cn.z2huo.demo.hello.kafka.model.KafkaOffset;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.common.TopicPartition;

import java.util.List;

/**
 * <p>
 *
 * @author z2huo
 */
public interface KafkaSubscriber {

    void consume(List<ConsumerRecord<String, String>> records, TopicPartition topicPartition);

    void rollback(List<ConsumerRecord<String, String>> records, KafkaOffset kafkaOffset);

    List<String> topics();

    String groupId();

    default int timeout() {
        return 100;
    }

    boolean needPause();

    KafkaOffsetDAO getOffsetDAO();

    default boolean errorContinue() {
        return false;
    }

    /**
     * 提交offset间隔,kafka自动提交时间默认是5000ms，heartbeat.interval.ms 3000ms
     * 此配置建议小于heartbeat时间，作用和kafka自动提交时间相似又有些不同
     */
    default long commitIntervalTime() {
        return -1;
    }

    /**
     * 提交offset间隔
     */
    default long commitIntervalSize() {
        return 1;
    }

    /**
     * 消息是否支持并行处理，默认不支持，
     */
    default boolean parallel() {
        return false;
    }

    /**
     * 并行处理线程数，默认-1，如果是负值，具体用的地方计算可用cpu数作为并行处理线程数
     */
    default int threshold() {
        return -1;
    }

}
